Packet coding based network communication

ABSTRACT

A method for data communication between a first node and a second node over a data path includes estimating a rate at which loss events occur, where a loss event is either an unsuccessful delivery of a single packet to the second data node or an unsuccessful delivery of a plurality of consecutively transmitted packets to the second data node, and sending redundancy messages at the estimate rate at which loss events occur.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. application Ser. No.14/935,885 filed Nov. 9, 2015, which claims the benefit of U.S.Provisional Application No. 62/076,583 filed Nov. 7, 2014. The entiredisclosures of the above applications are incorporated herein byreference.

BACKGROUND

This document relates to protocols for communicating over data networks,and more specifically, in at least some examples, to the use of packetcoding based protocols for communication over packet switched networks,for instance, over the Internet.

Data communication has benefitted from the near-universal use of theInternet Protocol (IP) on the interconnection of networks that form theInternet. The endpoints of communication connections or sessions set-upover the Internet may include servers, which may be in data centersco-located on “backbones” of the Internet, user devices on wired orwireless local area networks, and mobile devices on various generationsof cellular telephone technology (e.g. 3G, 4G, LTE). Local area networksmay be coupled to high-speed backbones of the Internet via facilities ofInternet Service Providers (ISPs), with “last mile” technologies rangingfrom digital subscriber loop (DSL) to hybrid-fiber coax to all-opticalnetworks. In some cases, networks may include satellite communicationlinks which may have very different delay characteristics than, forexample, terrestrial optical networks.

The communications paths that data packets follow in travelling fromwhere they originate to their destination(s) may typically traversemultiple different types of links and/or networks. Each link and/ornetwork may be supported by operating equipment such as servers,buffers, transmission links and the like, and may be characterized byparameters such as capacity, congestion, delay, packet loss, timing ofdata transfer and the like. Furthermore, transition points, alsosometimes referred to as “peering points” between types of networks mayimpose some restrictions on how data may flow through the networks.

In addition to characteristics that are inherent in the network designs,policy characteristics imposed by network operators may affect howtraffic flows across networks. For example, certain types of trafficand/or connections may be prioritized and potentially assigned moreresources, while other types of traffic may be throttled or blocked.Assigned resources and/or policies may be variable and may changethroughout the day, throughout the year, based on congestion, serviceagreements and the like.

The vast majority of connection-based or session-based traffic on theInternet today makes use of the Transmission Control Protocol (TCP). TCPis popular at least in part because it generally provides reliable andfair delivery of data. That is, the information that is sent by a senderis eventually received at a receiver and no one sender that adheres togenerally adopted fairness aspects of Internet protocols can utilizemore than their fair share of the bandwidth on average. However, eventhough TCP has evolved over the last decades, there are aspects of theprotocol that are not well matched to the characteristics, and moreparticularly to the variability of characteristics, of today's Internet.As examples, primary reliance on retransmission and use of windowingalgorithms for congestion control is not always well matched to thereal-time requirements and dynamic nature of communication channels thatmay have relatively rapidly varying characteristics, for example,periodic delay of the delivery of packets or rapidly changing linkcapacity.

As a result, applications running over today's Internet may be plaguedby long delays in transferring large data files, by pauses orinterruptions in video or audio streaming, by low audio or picturequality and/or by slow response times for real-time interactive content.These problems may be accompanied by and/or the result of an inefficientuse of the underlying network bandwidth due to overly restrictivecongestion control and/or to the large numbers of end-to-end packetretransmissions.

One technology that has been proposed to address some of the limitationsof TCP for communication over today's Internet is Random Linear NetworkCoding (RLNC), which involves a combination of using random linear codesfor error correction and recoding of packets at intermediate nodes inthe network. However, RLNC alone has not provided a complete solution tolimitations imposed by network characteristics. Other proposedtechnologies based on new codes, forward error correction codes, dataencryption techniques, and the like, also have not been shown to providecomplete solutions. Therefore, there is a need for a new protocol toensure high-speed uninterrupted delivery of data packets over networksthat comprises many different types of equipment, operated by manydifferent operators, over many different types of wired and wirelesslinks.

Also proposed has been the use of the user datagram protocol (UDP),which can speed up data delivery times but at the expense of reliabledata delivery. While some users and/or applications may be able totolerate lost and/or out-of-order data packets at a receiver, networkoperators have been known to impose policies that limit or block theamount of UDP traffic that may flow over their networks at any giventime. These restrictions are at least partially motivated by the factthat many of the current proprietary protocols running over UDP arebelieved to be unfair, meaning they may consume as much bandwidth and/ornetwork resources as they can in order to deliver their data veryquickly.

Thus there is a need for a new protocol that can reliably deliver datapackets over today's Internet faster than TCP but not at the expense offairness.

SUMMARY

In a general aspect, a method for data communication between a firstnode and a second node over a data path coupling the first node and thesecond node includes determining one or more redundancy messages fromdata messages at the first node using an error correcting code,transmitting messages from the first node to the second node over thedata path, the transmitted messages including the data messages andredundancy messages, receiving messages at the first node from thesecond node, including receiving messages indicative of successful andunsuccessful delivery of the messages transmitted from the first node tothe second node, maintaining an estimate of a rate at which loss eventsoccur over the communication path based on the messages received fromthe second node, including updating the estimate to incorporate a singleloss event when one or more of the messages received from the secondnode indicate an unsuccessful delivery of a single packet to the seconddata node, and updating the estimate to incorporate a single loss eventwhen one or more of the messages received from the second node indicatean unsuccessful delivery of a number of consecutively transmittedpackets to the second data node, and adjusting a rate of redundancymessages transmitted from the first node based on the estimate of therate at which loss events occur.

Aspects may include one or more of the following features.

Adjusting the rate of redundancy messages transmitted from the firstnode based on the estimate of the rate at which loss events occur mayinclude adjusting a ratio of the rate of redundancy messages transmittedfrom the first node to the estimate of the rate at which loss eventsoccur. The error correcting code used to determine the one or moreredundancy messages may be chosen based at least in part on an estimatedrate of loss events where a number of consecutive messagesunsuccessfully delivered to the second data node is less than apredetermined threshold. The second error correcting code may include aburst error correcting code.

In another general aspect, a communication apparatus includes a firstdevice having an interface for passing messages to and from a seconddevice over a communication path coupling the first device to the seconddevice. The first device includes a communication controller configuredto determine one or more redundancy messages from data messages at thefirst node using an error correcting code, transmit messages from thefirst node to the second node over the data path, the transmittedmessages including the data messages and redundancy messages, receivemessages at the first node from the second node, including receivingmessages indicative of successful and unsuccessful delivery of themessages transmitted from the first node to the second node, maintain anestimate of a rate at which loss events occur over the communicationpath based on the messages received from the second node, includingupdating the estimate to incorporate a single loss event when one ormore of the messages received from the second node indicate anunsuccessful delivery of a single packet to the second data node, andupdating the estimate to incorporate a single loss event when one ormore of the messages received from the second node indicate anunsuccessful delivery of a number of consecutively transmitted packetsto the second data node, and adjusting a rate of redundancy messagestransmitted from the first node based on the estimate of the rate atwhich loss events occur.

Aspects may include one or more of the following features.

Adjusting the rate of redundancy messages transmitted from the firstnode based on the estimate of the rate at which loss events occur mayinclude adjusting a ratio of the rate of redundancy messages transmittedfrom the first node to the estimate of the rate at which loss eventsoccur. The error correcting code used to determine the one or moreredundancy messages may be chosen based at least in part on an estimatedrate of loss events where a number of consecutive messagesunsuccessfully delivered to the second data node is less than apredetermined threshold. The second error correcting code may include aburst error correcting code.

DESCRIPTION OF DRAWINGS

FIG. 1 is a schematic of a data network including server and clientnodes coupled by intermediate networks;

FIG. 2 is a block diagram illustrating the modules that implementTCP-based communication between a client node and a server node;

FIG. 3 is a block diagram illustrating the modules that implement PacketCoding Transmission Communication Protocol (PC-TCP) based communicationbetween a client node and a server node;

FIG. 4 is a schematic diagram of a use of the approach shown in FIG. 3for communication between a server and a module device on a cellularnetwork;

FIG. 5 is a block diagram of a PC-TCP module that uses a conventionalUDP module;

FIG. 6 is a block diagram of a PC-TCP module that is partiallyintegrated into a client application and partially implemented using aconventional UDP module;

FIG. 7 is a block diagram of a PC-TCP module that is split with userspace and kernel space components;

FIG. 8 is a block diagram of a proxy architecture;

FIG. 9 is a block diagram of a PC-TCP based proxy architecture in whicha proxy node communicates using both PC-TCP and conventional TCP;

FIG. 10 is a block diagram of a proxy-based architecture of FIG. 9embodied using a gateway device;

FIG. 11 is a block diagram of an alternative proxy architecture embodiedwithin a client node;

FIG. 12 is a block diagram of a second PC-TCP based proxy architecturein which a proxy node communicates using both PC-TCP and conventionalTCP;

FIG. 13 is a block diagram of a proxy-based architecture of FIG. 12embodied using a wireless access device;

FIG. 14 is a block diagram of a proxy-based architecture of FIG. 12embodied cellular network;

FIG. 15 is a block diagram of a proxy-based architecture of FIG. 12embodied cable television based data network;

FIG. 16 is a block diagram of an intermediate proxy that communicateswith a client node and with a server node using separate PC-TCPconnections;

FIG. 17 is a block diagram of a proxy-based architecture of FIG. 16embodied in a network device;

FIG. 18 is a block diagram of an intermediate proxy that recodescommunication between a client node and with a server node;

FIGS. 19-20 are diagrams that illustrates delivery of common content tomultiple destinations;

FIGS. 21A-K are schematic diagrams of various embodiments of PC-TCPcommunication approaches;

FIGS. 22-25 are block diagrams illustrating an embodiment PC-TCPcommunication approach that is configured according to a number oftunable parameters;

FIG. 26 is a diagram showing a network communication system using theapproach of FIGS. 22-25;

Table of Contents Cross-Reference to Related Applications 1 Background 1Summary 4 Description of Drawings 6 Table of Contents 8 DetailedDescription 9  1  Overview 9  2  Architectures and applications 14  2.1  Transport layer architectures 14    2.1.1 Kernel implementation14    2.1.2 Alternative software implementations 15   2.2  Proxyarchitectures 16    2.2.1 Conventional proxy node 16    2.2.2 Firstalternative proxy node 17    2.2.3 Integrated proxy 18    2.2.4 Secondalternative proxy node 19   2.3  Intermediate proxy 21   2.4  Recodingnode 22   2.5  Multicast 23   2.6  Further illustrative examples 24 3  Packet Coding (PC) 28   3.1  Data characteristics 28   3.2  ChannelCharacteristics 30   3.3  Inter-packet coding 32    3.3.1 Forward errorcorrection and repair retransmission 33    3.3.2 Random linear coding 35  3.4  Batch transmission 38   3.5  Protocol parameters 47  3.6  Transmission control 48    3.6.1 Congestion control 48   3.6.2 Transmission rate control 50   3.7  Error control 50  3.8  Parameter control 52    3.8.1 Initialization 52    3.8.2 Tunablecoding 52  4  Alternatives and implementations 58 What is claimed is: 64Abstract 65

DETAILED DESCRIPTION

1 Overview

Various embodiments described in this document relate to communicationprotocols that improve aspects of communication between nodes on a datanetwork. These aspects include, for instance, average, worst case, orvariability in communication delay, channel utilization, and/or errorrate. These embodiments are primarily described in the context of packetswitched networks, and more particularly in the context of InternetProtocol (IP) based packet switched networks. However, it should beunderstood that at least some of the embodiments are more generallyapplicable to data communication that does not use packet switching orIP, for instance based on circuit-switched of other forms of datanetworks.

Furthermore, various embodiments are described in the context of databeing sent from a “server” to a “client.” It should be understood thatthese terms are used very broadly, roughly analogous to “data source”and “data destination”. Furthermore, in at least some applications ofthe techniques, the nodes are peers, and may alternate roles as “server”and “client” or may have both roles (i.e., as data source and datadestination) concurrently. However, for the sake of exposition, exampleswhere there is a predominant direction of data flow from a “server” nodeto a “client” node are described with the understanding that thetechniques described in these examples are applicable to many othersituations.

One example for a client-server application involves a server passingmultimedia (e.g., video and audio) data, either recorded or live, to aclient for presentation to a user. Improved aspects of communicationfrom the client to the server in such an example can reducedcommunication delay, for instance providing faster startup, reducedinstances of interrupted playback, reduced instances of bandwidthreduction, and/or increased quality by more efficient channelutilization (e.g., by avoiding use of link capacity in retransmissionsor unnecessary forward error correction). This example is useful forexposition of a number of embodiments. However, it must be recognizedthat this is merely one of many possible uses of the approacheddescribed below.

FIG. 1 shows a high-level block diagram of some components that may beinterconnected on a portion of a data network. A general example of acommunication connection or session arranged on today's Internet may berepresented as a client node 120 (e.g., a client computer) communicatingwith a server node 110 (e.g., a server computer) over one network or aninterconnection of multiple networks 151-152. For example, the clientand server nodes may communicate over the public Internet using theInternet Protocol (IP).

Referring to FIG. 2, in an example involving conventional communicationtechniques, a client node 120 hosts a client application 222, whichcommunicates with a TCP module 226 that implements a TransmissionControl Protocol (TCP). The TCP module 226 communicates with an IPmodule 228 that implements an Internet Protocol for communicatingbetween nodes on the interconnection of networks. The communicationpasses between nodes of the networks over a channel 230 (i.e., anabstraction of the path comprising physical links between equipmentinterconnecting the nodes of the network). Similarly, the server node110 hosts a server application 212, a TCP module 216, and an IP module218. When the server application 110 and the client application 222communicate, for example, with data being passed from the serverapplication to the client application, TCP module 216 at the server node110 and the TCP layer 226 at the client node 120 interact to implementthe two endpoints for the Transmission Control Protocol (TCP).

Generally, data units 201 (e.g., encoding of multimedia frames or otherunits of application data) generated by the server application 212 arepassed to the TCP module 216. The TCP module assembles data payloads202, for example, concatenating multiple data units 201 and/or bydividing data units 201 into multiple data payloads 202. In thediscussion below, these payloads are referred to in some instances asthe “original” or “uncoded” “packets” or original or uncoded “payloads”,which are communicated to the client (i.e., destination) node in thenetwork. Therefore, it should be understood that the word “packet” isnot used with any connotation other than being a unit of communication.In the TCP embodiment illustrated in FIG. 2, each data payload 202 is“wrapped” in a TCP packet 204, which is passed to the IP module 218,which further wraps the TCP packet 204 in an IP packet 206 fortransmission from the server node 110 to the client node 120, over whatis considered to be a IP layer channel 230 linking the server node 110and the client node 120. Note that at lower layers, such as at a datalink layer, further wrapping, unwrapping, and/or rewrapping of the IPpacket 206 may occur, however, such aspects are not illustrated in FIG.2. Generally, each payload 202 is sent in at least one TCP packet 204and a corresponding IP packet 206, and if not successfully received bythe TCP module 226 at the client node 120, may be retransmitted again bythe TCP module 216 at the server node 110 to result in successfuldelivery. The data payloads 202 are broken down into the data units 201originally provided by the server application 212 and are then deliveredin the same order to the client application 222 as they were provided bythe server application 212.

TCP implements a variety of features, including retransmission of lostpackets, maintaining order of packets, and congestion control to avoidcongestion at nodes or links along the path through the network and toprovide fair allocation of the limited bandwidth between and within thenetworks at intermediate nodes. For example, TCP implements a “windowprotocol” in which only a limited number (or range of sequence numbers)of packets are permitted to be transmitted for which end-to-endacknowledgments have not yet been received. Some implementations of TCPadjust the size of the window, for example, starting initially with asmall window (“slow start”) to avoid causing congestion. Someimplementations of TCP also control a rate of transmission of packets,for example, according to the round-trip-time and the size of thewindow.

The description below details one or more alternatives to conventionalTCP-based communication as illustrated in FIG. 2. In general, thesealternatives improve one or more performance characteristics, forexamples, one or more of overall throughput, delay, and jitter. In someapplications, these performance characteristics are directly related toapplication level performance characteristics, such as image quality ina multimedia presentation application. Referring to FIG. 1, in a numberof examples, these alternatives are directed to improving communicationbetween a server node 110 and at least one client node 120. One exampleof such communication is streaming media from the server node 110 to theclient nodes 120, however, it should be recognized that this is only oneof many examples where the described alternatives can be used.

It should also be understood that the network configuration illustratedin FIG. 1 is merely representative of a variety of configurations. Anumber of these configurations may have paths with disparatecharacteristics. For example, a path from the server node 110 to aclient node 120 may pass over links using different types of equipmentand with very different capacities, delays, error rates, degrees ofcongestion etc. In many instances, it is this disparity that presentschallenges to achieving end-to-end communication that achieves highrate, low delay and/or low jitter. As one example, the client node 120may be a personal communication device on a wireless cellular network,the network 152 in FIG. 1 may be a cellular carrier's private wirednetwork, and network 151 may be the public Internet. In another example,the client node 120 may be a “WiFi” node of a private wireless localarea network (WLAN), network 152 may be a private local area network(LAN), and network 151 may be the public Internet.

A number of the alternatives to conventional TCP make use of a PacketCoding (PC) approach. Furthermore, a number of these approaches make useof Packet Coding essentially at the Transport Layer. Although differentembodiments may have different features, these implementations aregenerically referred to below as Packet Coding Transmission ControlProtocol (PC-TCP). Other embodiments are also described in which thesame or similar PC approaches are used at other layers, for instance, ata data link layer (e.g., referred to as PC-DL), and therefore it shouldbe understood that in general features described in the context ofembodiments of PC-TCP may also be incorporated in PC-DL embodiments.

Before discussing particular features of PC-TCP in detail, a number ofembodiments of overall system architectures are described. The laterdescription of various embodiments of PC-TCP should be understood to beapplicable to any of these system architectures, and others.

2 Architectures and Applications

2.1 Transport Layer Architectures

2.1.1 Kernel Implementation

Referring to FIG. 3, in one architecture, the TCP modules at the servernode 110 and the client node 120 are replaced with PC-TCP modules 316and 326, respectively. Very generally, the PC-TCP module 316 at theserver accepts data units 201 from the server application 212 and formsoriginal data payloads 202 (i.e., “uncoded packets”, formed internallyto the PC-TCP module 316 and not illustrated). Very generally, thesedata payloads 202 are transported to and/or reconstructed at the PC-TCPmodule 326 at the client node 120, where the data units 201 areextracted and delivered to the client application 222 in the same orderas provided by the server application 212. As described in substantiallymore detail below, at least some embodiments of the PC-TCP modules makeuse of Random Linear Coding (RLC) for forming packets 304 fortransmission from the source PC-TCP module to the destination PC-TCPmodule, with each packet 304 carrying a payload 302, which for at leastsome packets 304 is formed from a combination of multiple originalpayloads 202. In particular, at least some of the payloads 202 areformed as linear combinations (e.g., with randomly generatedcoefficients in a finite field) of original payloads 202 to implementForward Error Correction (FEC), or as part of a retransmission or repairapproach in which sufficient information is not provided using FEC toovercome loss of packets 304 on the channel 230. Furthermore, the PC-TCPmodules 316 and 326 together implement congestion control and/or ratecontrol to generally coexist in a “fair” manner with other transportprotocols, notably conventional TCP.

One software implementation of the PC-TCP modules 316 or 326, issoftware modules that are integrated into the operating system (e.g.,into the “kernel”, for instance, of a Unix-based operating system) inmuch the same manner that a conventional TCP module is integrated intothe operating system. Alternative software implementations are discussedbelow.

Referring to FIG. 4, in an example in which a client node 120 is asmartphone on a cellular network (e.g., on an LTE network) and a servernode 110 is accessible using IP from the client node, the approachillustrated in FIG. 3 is used with one end-to-end PC-TCP session linkingthe client node 120 and the server node 110. The IP packets 300 carryingpackets 304 of the PC-TCP session traverse the channel between the nodesusing conventional approaches without requiring any non-conventionalhandling between the nodes at the endpoints of the session.

2.1.2 Alternative Software Implementations

The description above includes modules generically labeled “PC-TCP”. Inthe description below, a number of different implementations of thesemodules are presented. It should be understood that, in general, anyinstance of a PC-TCP module may be implemented using any of thedescribed or other approaches.

Referring to FIG. 5, in some embodiments, the PC-TCP module 326 (or anyother instance of PC-TCP module discussed in this document) isimplemented as a PC-TCP module 526, which includes a Packet Coding (PC)module 525 that is coupled to (i.e., communicates with) a conventionUser Datagram Protocol (UDP) module 524. Essentially each PC-TCP packetdescribed above consists of a PC packet “wrapped” in a UDP packet. TheUDP module 524 then communicates via the IP modules in a conventionalmanner. In some implementations, the PC module 525 is implemented as a“user space” process, which communicates with a kernel space UDP module,while in other implementations, the PC module 525 is implement in kernelspace.

Referring to FIG. 6, in some embodiments, the PC module 625, or itsfunction, is integrated into a client application 622, which thencommunicates directly with the conventional UDP module 524. The PC-TCPmodule 626 therefore effectively spans the client application 622 andthe kernel implementation of the UDP module 524. While use of UDP tolink the PC modules at the client and at the server has certainadvantages, other protocols may be used. One advantage of UDP is thatreliable transmission through use of retransmission is not part of theUDP protocol, and therefore error handling can be carried out by the PCmodules.

Referring to FIG. 7, in some implementations, a PC-TCP module 726 isdivided into one part, referred to as a PC-TCP “stub” 727, whichexecutes in the kernel space, and another part, referred to as thePC-TCP “code” 728, which executes in the user space of the operatingsystem environment. The stub 727 and the code 728 communicate to providethe functionality of the PC-TCP module.

It should be understood that these software implementations are notexhaustive. Furthermore, as discussed further below, in someimplementations, a PC-TCP module of any of the architectures or examplesdescribed in this document may be split among multiple hosts and/ornetwork nodes, for example, using a proxy architecture.

2.2 Proxy Architectures

2.2.1 Conventional Proxy Node

Referring to FIG. 8, certain conventional communication architecturesmake use of proxy servers on the communication path between a clientnode 120 and a server node 110. For example, a proxy node 820 hosts aproxy server application 822. The client application 222 communicateswith the proxy server application 822, which acts as an intermediary incommunication with the server application 212 (not shown in FIG. 8). Itshould be understood that a variety of approaches to implementing such aproxy are known. In some implementations, the proxy application isinserted on the path without the client node necessarily being aware. Insome implementations, a proxy client 812 is used at the client node, insome cases forming a software “shim” between the application layer andthe transport layer of the software executing at the client node, withthe proxy client 812 passing communication to the proxy serverapplication. In a number of proxy approaches, the client application 222is aware that the proxy is used, and the proxy explicitly acts as anintermediary in the communication with the server application. Aparticular example of such an approach makes use of the SOCKS protocol,in which the SOCKS proxy client application (i.e., an example of theproxy client 812) communicates with a SOCKS proxy server application(i.e., an example of the proxy server application 822). The client andserver may communicate over TCP/IP (e.g., via TCP and IP modules 826 band 828 b, which may be implemented together in one TCP module), and theSOCKS proxy server application fulfills communication requests (i.e.,with the server application) on behalf of the client application (e.g.,via TCP and IP modules 826 a and 828 a). Note that the proxy serverapplication may also perform functions other than forwardingcommunication, for example, providing a cache of data that can be usedto fulfill requests from the client application.

2.2.2 First Alternative Proxy Node

Referring to FIG. 9, in an alternative proxy architecture, a proxy node920 hosts a proxy server application 922, which is similar to the proxyserver application 822 of FIG. 8. The client application 222communicates with the proxy server application 922, for example asillustrated using conventional TCP/IP, and in some embodiments using aproxy client 812 (e.g., as SOCKS proxy client), executing at the clientnode 120. As illustrated in FIG. 9, the proxy server application 922communicates with a server application using a PC-TCP module 926, whichis essentially the same as the PC-TCP module 326 shown in FIG. 3 forcommunicating with the PC-TCP module 316 at the server node 110.

In some embodiments, the communication architecture of FIG. 9 and theconventional communication architecture of FIG. 2 may coexist in thecommunication between the client application and the server applicationmay use PC-TCP, conventional TCP, or concurrently use both PC-TCP andTCP. The communication approach may be based on a configuration of theclient application and/or based on dialog between the client and serverapplications in establishing communication between them.

Referring to FIG. 10, in an example of the architecture shown in FIG. 9,the proxy application 922 is hosted in a gateway 1020 that links a localarea network (LAN) 1050 to the Internet. A number of conventional clientnodes 120 a-z are on the LAN, and make use of the proxy serverapplication to communicate with one or more server applications over theInternet. Various forms of gateway 1020 may be used, for instance, arouter, firewall, modem (e.g., cable modem, DSL modem etc.). In suchexamples, the gateway 1020 may be configured to pass conventional TCP/IPcommunication between the client nodes 120 a-z and the Internet, and forcertain server applications or under certain conditions (e.g.,determined by the client, the server, or the gateway) use the proxy tomake use of PC-TCP for communication over the Internet.

It should be understood that the proxy architecture shown in FIG. 9 maybe equally applied to server nodes 110 that communicate with a proxynode using TCP/IP, with the proxy providing PC-TCP communication withclient nodes, either directly or via client side proxies. In such cases,the proxy server application serving the server nodes may be hosted, forinstance, in a gateway device, such as a load balancer (e.g., as mightbe used with a server “farm”) that links the servers to the Internet. Itshould also be understood that in some applications, there is a proxynode associated with the server node as well as another proxy associatedwith the client node.

2.2.3 Integrated Proxy

Referring to FIG. 11, in some examples, a proxy server application 1122,which provides essentially the same functionality as the proxy serverapplication 922 of FIG. 9, is resident on the client node 1120 ratherthan being hosted on a separate network node as illustrated in FIG. 9.In such an example, the connection between the client application 222and the proxy server application 1122 is local, with the communicationbetween them not passing over a data network (although internally it maybe passed via the IP software “stack”). For example, a proxy client 812(e.g., a SOCKS client) interacts locally with the proxy serverapplication 1122, or the functions of the proxy client 812 and the proxyserver application 1122 are integrated into a single software component.

2.2.4 Second Alternative Proxy Node

In examples of the first alternative proxy node approach introducedabove, communication between the client node and the proxy node usesconventional techniques (e.g., TCP/IP), while communication between theproxy node and the server node (or its proxy) uses PC-TCP. Such anapproach may mitigate congestion and/or packet error or loss on the linkbetween the server node and the proxy node, however, it would notgenerally mitigate issues that arise on the link between the proxy nodeand the client node. For example, the client node and the proxy node maybe linked by a wireless channel (e.g., WiFi, cellular, etc.), which mayintroduce a greater degree of errors than the link between the serverand the proxy node over a wired network.

Referring to FIG. 12, in a second proxy approach, the client node 120hosts a PC-TCP module 326, or hosts or uses any of the alternatives ofsuch a module described in this document. The client application 222makes use of the PC-TCP module 326 at the client node to communicationwith a proxy node 1220. The proxy node essentially translates betweenthe PC-TCP communication with the client node 120 and conventional(e.g., TCP) communication with the server node. The proxy node 1220includes a proxy server application 1222, which makes use of a PC-TCPmodule 1226 to communicate with the client node (i.e., forms transportlayer link with the PC-TCP module 326) at the client node, and uses aconventional TCP module 826 a to communicate with the server.

Examples of such a proxy approach are illustrated in FIGS. 13-15.Referring to FIG. 13, an example of a proxy node 1220 is integrated in awireless access device 1320 (e.g., a WiFi access point, router, etc.).The wireless access device 1320 is coupled to the server via a wiredinterface 1351 and coupled to a wireless client node 120 via a wirelessinterface 1352 at the access device and a wireless interface 1353 at theclient node. The wireless access device 1320 includes a proxy andcommunication stack implementation 1321, which includes the modulesillustrated for the proxy 1220 in FIG. 12, and the wireless client node120 includes an application and communication stack implementation 1322,which includes the modules illustrated for the client node 120 in FIG.12. Note that the IP packets 300 passing between the access device 1320and the client node 120 are generally further “wrapped” using a datalayer protocol, for example, in data layer packets 1350. As introducedabove, in some implementations, rather than implementing the PacketCoding at the transport layer, in a modification of the approach shownin FIG. 13, the Packet Coding approaches are implemented at the datalink layer.

Referring to FIG. 14, a proxy node 1220 is integrated in a node of aprivate land network of a cellular service provider. In this example,communication between a server 110 and the proxy node 1220 useconventional techniques (e.g., TCP) over the public Internet, whilecommunication between the proxy node and the client node use PC-TCP. Itshould be understood that the proxy node 1220 can be hosted at variouspoints in the service provider's network, including without limitationat a gateway or edge device that connects the provider's private networkto the Internet (e.g. a Packet Data Network Gateway of an LTE network),and/or at an internal node of the network (e.g., a serving gateway, basestation controller, etc.). Referring to FIG. 15, a similar approach maybe used with a cable television based network. PC-TCP communication maypass between a head end device and a distribution network (e.g., afiber, coaxial, or hybrid fiber-coaxial network) to individual homes.For example, each home may have devices that include PC-TCP capabilitiesthemselves, or in some example, a proxy node (e.g., a proxy nodeintegrated in a gateway 1010 as shown in FIG. 10) terminates the PC-TCPconnections at each home. The proxy node that communicates with theserver 110 using conventional approaches, while communicating usingPC-TCP over the distribution network is hosted in a node in the serviceprovider's private network, for instance at a “head end” device 1220 bof the distribution network, or in a gateway device 1220 a that linksthe service provider's network with the public Internet.

2.3 Intermediate Proxy

Referring to FIG. 16, in another architecture, the channel between aserver node and a client node is broken in to independent tandem PC-TCPlinks. An intermediate node 1620 has two instances of a PC-TCP module1626 and 1627. One PC-TCP module 1626 terminates a PC-TCP channel andcommunicates with a corresponding PC-TCP module at the server (e.g.,hosted at the server node or at a proxy associated with the servernode). The other PC-TCP module 1627 terminates a PC-TCP channel andcommunicates with a corresponding PC-TCP module at the client (e.g.,hosted at the client node or at a proxy associated with the clientnode). The two PC-TCP modules 1626 and 1627 are coupled via a routingapplication 1622, which passes decoded data units provided by one of thePC-TCP modules (e.g., module 1626 from the server node) and to anotherPC-TCP module for transmission to the client.

Note that parameters of the two PC-TCP channels that are bridged at theintermediate node 1620 do not have to be the same. For example, thebridged channels may differ in their forward error correction code rate,block size, congestion window size, pacing rate, etc. In cases in whicha retransmission protocol is used to address packet errors or lossesthat are not correctable with forward error correction coding, thePC-TCP modules at the intermediate node request or service suchretransmission requests.

In FIG. 16, only two PC-TCP modules are shown, but it should beunderstood that the intermediate node 1620 may concurrently provide alink between different pairs of server and client nodes.

Referring to FIG. 17, an example of this architecture may involve aserver node 110 communicating with an intermediate node 1620, forexample, hosted in a gateway device 1720 of a service provider networkwith the intermediate node 1620 also communicating with the client node120 via a second PC-TCP link.

2.4 Recoding Node

Referring to FIG. 18, another architecture is similar to the one shownin FIG. 16 in that an intermediate node 1820 is on a path between aserver node 110 and a client node 120, with PC-TCP communication passingbetween it and the server node and between it and the client node.

In FIG. 16, the PC-TCP modules 1626, 1627 fully decode and encode thedata passing through the node. In the approach illustrated in FIG. 18,such complete decoding is not necessary. Rather, a recoding PC-TCPmodule 1822 receives payloads 1802 a-b from PC-TCP packets 1804 a-b, andwithout decoding to reproduce the original uncoded payloads 202 (notshown), the module uses the received PC-TCP packets to send PC-TCPpackets 304, with coded payloads 302, toward the destination. Details ofvarious recoding approaches are described further later in thisdocument. However, in general, the processing by the recoding PC-TCPmodule includes one or more of the following functions: forwardingPC-TCP packets without modification to the destination; “dropping”received PC-TCP packets without forwarding, for example, if theredundancy provided by the received packets are not needed on theoutbound link; generating and transmitting new PC-TCP packets to provideredundancy on the outbound link. Note that the recording PC-TCP modulemay also provide acknowledgement information on the inbound PC-TCP link(e.g., without requiring acknowledgement from the destination node), forexample, to the server, and process received acknowledgements on theoutbound link. The processing of the received acknowledgements mayinclude causing transmission of additional redundant information in thecase that the originally provided redundancy information was notsufficient for reconstruction of the payload data.

In general, the recoding PC-TCP module maintains separate communicationcharacteristics on the inbound and outbound PC-TCP channels. Therefore,although it does not decode the payload data, it does provide controland, in general, the PC-TCP channels may differ in their forward errorcorrection code rate, block size, congestion window size, pacing rate,etc.

2.5 Multicast

FIGS. 19-20 show two examples of delivery of common content to multipledestination nodes simultaneously via multicast connections. Theadvantage of multicast is that a single packet or block of N packets hasto be sent by the source node into the network and the network willattempt to deliver the packets to all destination nodes in the multicastgroup. If the content needs to be delivered reliably, then TCP will mostlikely be used as the transport layer protocol. To achieve reliability,TCP requires destination nodes to respond with acknowledgments andspecify the packets that each destination node is missing. If there are10 s of thousands or 100 s of thousands of receivers, and eachdestination node is missing a different packet or set of packets, thenumber of different retransmissions to the various receivers willundercut the advantages of the simultaneous transmission of the contentto all destination nodes at once. With network coding and forward errorcorrection, a block of N packets can be sent to a large number ofmulticast destination nodes at the same time. The paths to thesemultiple destination nodes can be similar (all over a large WiFi orEthernet local area network) or disparate (some over WiFi, some overcellular, some over fiber links, and some over various types ofsatellite networks). The algorithms described above that embodytransmission and congestion control, forward error correction, senderbased pacing, receiver based pacing, stream based parameter tuning,detection and correction for missing and out of order packets, use ofinformation across multiple connections, fast connection start and stop,TCP/UDP fallback, cascaded coding, recoding by intermediate nodes, andcoding of the ACKs can be employed to improve the throughput andreliability of delivery to each of the multicast destination node. Whenlosses are detected and coding is used, the extra coded packets can besent to some or all destination nodes. As long as N packets are receivedat each destination node, the missing packets at each destination nodecan be reconstructed from the coded packets if the number of extra codedpackets match or exceed the number of packets lost at all of thereceivers. If fewer than N packets are received at any of thedestination nodes, any set of different coded packets from the block ofN packets can be retransmitted and used to reconstruct any missingpacket in the block at each of the destination nodes. If somedestination nodes are missing more than one packet, then the maximumnumber of coded packets to be retransmitted will be equal to the largestnumber of packets that are missing by any of the destination nodes.These few different coded packets can be used to reconstruct the missingpackets at each of the destination nodes. For example if the mostpackets missing at any destination node is four, then any four differentcoded packets can be retransmitted.

2.6 Further Illustrative Examples

FIGS. 21A-21K show exemplary embodiments of data communication systemsand devices and highlight various ways to implement the novel PC-TCPdescribed herein. These configurations identify some of the possiblenetwork devices, configurations, and applications that may benefit fromusing PC-TCP, but there are many more devices, configurations andapplications that may also benefit from PC-TCP. The followingembodiments are described by way of example, not limitation.

In an exemplary embodiment depicted in FIG. 21A, a user device 404 suchas a smartphone, a tablet, a computer, a television, a display, anappliance, a vehicle, a home server, a gaming console, a streaming mediabox and the like, may include a PC-TCP proxy that may interface withapplications running in the user device 404. The application on the userdevice 404 may communicate with a resource in the cloud 402 a such as aserver 408. The server 408 may be a file server, a web server, a videoserver, a content server, an application server, a collaboration server,an FTP server, a list server, a telnet server, a mail server, a proxyserver, a database server, a game server, a sound server, a printserver, an open source server, a virtual server, an edge server, astorage device and the like, and may include a PC-TCP proxy that mayinterface with applications and/or processes running on the server 408.In embodiments, the server in the cloud may terminate the PC-TCPconnection and interface with an application on the server 408 and/ormay forward the data on to another electronic device in the network. Inembodiments, the data connection may travel a path that utilizes theresources on a number of networks 402 a, 402 b. In embodiments PC-TCPmay be configured to support multipath communication such as for examplefrom a video server 408 through a peering point 406, though a carriernetwork 402 b, to a wireless router or access point 410 to a user device404 and from a video server 408 through a peering point 406, though acarrier network 402 b, to a cellular base station or cell transmitter412 to a user device 404. In embodiments, the PC-TCP may includeadjustable parameters that may be adjusted to improve multipathperformance. In some instances, the exemplary embodiment shown in FIG.21A may be referred to as an over-the-top (OTT) embodiment.

In embodiments, such as the exemplary embodiments shown in FIG. 21B andFIG. 21C, other devices in the network may comprise PC-TCP proxies. Forexample, the wireless access point or router 410 and the base station orcell transmitter 412 may comprise PC-TCP proxies. In embodiments, theuser device 404 may also comprise a PC-TCP proxy (FIG. 21C) or it maynot (FIG. 21B). If the user device does not comprise a PC-TCP proxy, itmay communicate with the access point 410 and/or base station 412 usinga wireless or cellular protocol and/or conventional TCP or UDP protocol.The PC-TCP proxy in either or both the access point 410 and base station412 may receive data packets using these conventional communications andmay convert these communications to the PC-TCP for a connection to videoserver 408. In embodiments, if conventional TCP provides the highestspeed connection between the end user device 404 and/or the access point410 or the base station 412, then the PC-TCP proxy may utilize only someor all of the features in PC-TCP that may be compliant with and maycompliment conventional TCP implementations and transmit the data usingthe TCP layer.

FIG. 21D shows an exemplary embodiment where a user device may comprisea PC-TCP proxy and may communicate with a PC-TCP proxy server 408 on aninternet. In this embodiment, an entity may provide support for highspeed internet connections by renting, buying services from, ordeploying at least one server in the network and allowing other serversor end user devices to communicate with it using PC-TCP. The at leastone server in the network running PC-TCP may connect to other resourcesin the network and/or end users using TCP or UDP.

In embodiments, such as the exemplary embodiments shown in FIG. 21E andFIG. 21F, other devices in the network may comprise PC-TCP proxies. Forexample, the wireless access point or router 410 and the base station orcell transmitter 412 may comprise PC-TCP proxies. In embodiments, theuser device 404 may also comprise a PC-TCP proxy (FIG. 21F) or it maynot (FIG. 21E). If the user device does not comprise a PC-TCP proxy, itmay communicate with the access point 410 and/or base station 412 usinga wireless or cellular protocol and/or conventional TCP or UDP protocol.The PC-TCP proxy in either or both the access point 410 and base station412 may receive data packets using these conventional communications andmay convert these communications to the PC-TCP for a connection toPC-TCP server 408. In embodiments, if conventional TCP provides thehighest speed connection between the end user device 404 and/or theaccess point 410 or the base station 412, then the PC-TCP proxy mayutilize only some or all of the features in PC-TCP that may be compliantwith and may compliment conventional TCP implementations and transmitthe data using the TCP layer.

In embodiments, at least some network servers 408 may comprise PC-TCPproxies and may communicate with any PC-TCP servers or devices usingPC-TCP. In other embodiments, network servers may communicate withPC-TCP servers or devices using conventional TCP and/or other transportprotocols running over UDP.

In exemplary embodiments as depicted in FIG. 21G, ISPs and/or carriersmay host content on one or more servers that comprise PC-TCP proxies. Inembodiments, devices such as set-top boxes, cable boxes, digital videorecorders (DVRs), modems, televisions, smart televisions, internettelevisions, displays, and the like may comprise PC-TCP proxies. A userdevice 404 such as described above, may include a PC-TCP proxy that mayinterface with applications running in the user device 404. Theapplication on the user device 404 may communicate with a resource inthe cloud 402 c such as a server 408. The server 408 may be any type ofcommunications server as describe above, and may include a PC-TCP proxythat may interface with applications and/or processes running on theserver 408. In embodiments, the server in the cloud may terminate thePC-TCP connection and interface with an application on the server 408and/or may forward the data on to another electronic device in thenetwork. In embodiments, the data connection may travel a path thatutilizes the resources on a number of networks 402 a, 402 b, 402 c. Inembodiments PC-TCP may be configured to support multipath communicationsuch as for example from a video server 408 through a direct peeringpoint (DP) 406, to a wireless router or access point 410 or a basestation 412 to a user device 404 and from a video server 408 directly toan access point 410 and/or to a cellular base station or celltransmitter 412 to a user device 404. In embodiments, the PC-TCP mayinclude adjustable parameters that may be adjusted to improve multipathperformance.

The exemplary placements of networking devices in the communicationscenarios described above should not be taken as limitations. It shouldbe recognized that PC-TCP proxies can be placed in any network deviceand may support any type of data connection. That is, any type ofend-user device, switching device, routing device, storage device,processing device and the like, may comprise PC-TCP proxies. Also PC-TCPproxies may reside only in the end-nodes of a communication path and/oronly at two nodes along a connection path. However, PC-TCP proxies mayalso reside in more than two nodes of a communication path and maysupport multi-cast communications and multipath communications. PC-TCPproxies may be utilized in point-to-point communication networks,multi-hop networks, meshed networks, broadcast networks, storagenetworks, and the like.

3 Packet Coding (PC)

The description above focuses on architectures in which a packet codingapproach is deployed, and in particular architectures in which atransport layer PC-TCP approach is used. In the description below, anumber of features of PC-TCP are described. It should be understood thatin general, unless otherwise indicated, these features are compatiblewith one another and can be combined in various combinations to addressparticular applications and situations.

3.1 Data Characteristics

As introduced above, data units (e.g., audio and/or video frames) aregenerally used to form data packets, for example, with one data unit perdata packet, with multiple data units per data packet, or in someinstances separating individual data units into multiple data packets.In some applications, the data units and associated data frames form astream (e.g., a substantially continuous sequence made available overtime without necessarily having groupings or boundaries in thesequence), while in other applications, the data units and associateddata frames form one or more batches (e.g., a grouping of data that isrequired as a whole by the recipient).

In general, stream data is generated over time at a source and consumedat a destination, typically at a substantially steady rate. An exampleof a stream is a multimedia stream associated with person-to-personcommunication (e.g., a multimedia conference). Delay (also referred toas latency) and variability in delay (also referred to as jitter) areimportant characteristics of the communication of data units from asource to a destination.

An extreme example of a batch is delivery of an entire group of data,for example, a multiple gigabyte sized file. In some such examples,reducing the overall time to complete delivery (e.g., by maximizingthroughput) of the batch is of primary importance. One example of batchdelivery that may have very sensitive time (and real-time update)restraints is database replication.

In some applications, the data forms a series of batches that requiredelivery from a source to a destination. Although delay in start ofdelivery and/or completion of delivery of a batch of data units may beimportant, in many applications overall throughput may be mostimportant. An example of batch delivery includes delivery of portions ofmultimedia content, for instance, with each batch corresponding tosections of viewing time (e.g., 2 seconds of viewing time or 2 MB perbatch), with content being delivered in batches to the destination wherethe data units in the batches are buffered and used to construct acontinuous presentation of the content. As a result, an importantconsideration is the delivery of the batches in a manner than providescontinuity between batches for presentation, without “starving” thedestination application because a required batch has not arrived intime. In practice, such starving may cause “freezing” of videopresentation in multimedia, which is a phenomenon that is all toofamiliar to today's users of online multimedia delivery. Anotherimportant consideration is reduction in the initial delay in providingthe data units of the first batch to the destination application. Suchdelay is manifested, for example, in a user having to wait for initialstartup of video presentation after selecting multimedia for onlinedelivery. Another consideration in some applications is overallthroughput. This may arise, for example, if the source application hascontrol over a data rate of the data units, for example, being able toprovide a higher fidelity version of the multimedia content if higherthroughput can be achieved. Therefore, an important consideration may beproviding a sufficiently high throughput in order to enable delivery ofa high fidelity version of the content (e.g., as opposed to greatlycompressed version or a backed-off rate of the content resulting inlower fidelity).

Various packet coding approaches described below, or selection ofconfiguration parameters of those approaches, address considerationsthat are particularly relevant to the nature of the characteristics ofthe data being transported. In some examples, different approaches orparameters are set in a single system based on a runtime determinationof the nature of the characteristics of the data being transported.

3.2 Channel Characteristics

In general, the communication paths that link PC-TCP source anddestination endpoints exhibit both relatively stationary or consistentchannel characteristics, as well as transient characteristics.Relatively stationary or consistent channel characteristics can include,for example, capacity (e.g., maximum usable throughput), latency (e.g.,transit time of packets from source to destination, variability intransit time), error rate (e.g., average packet erasure or error rate,burst characteristics of erasures/errors). In general, such relativelystationary or consistent characteristics may depend on the nature of thepath, and more particularly on one or more of the links on the path. Forexample, a path with a link passing over a 4G cellular channel mayexhibit very different characteristics than a path that passes over acable television channel and/or a WiFi link in a home. As discussedfurther below, at least some of the approaches to packet coding attemptto address channel characteristic differences between types ofcommunication paths. Furthermore, at least some of the approachesinclude aspects that track relatively slow variation in characteristics,for example, adapting to changes in average throughput, latency, etc.

Communication characteristics along a path may also exhibit substantialtransient characteristics. Conventional communication techniques includeaspects that address transient characteristics resulting from congestionalong a communication path. It is well known that as congestionincreases, for example at a node along a communication path, it isimportant that traffic is reduced at that node in order to avoid anunstable situation, for instance, with high packet loss resulting frombuffer overruns, which then further increases data rates due toretransmission approaches. One common approach to addressingcongestion-based transients uses an adaptive window size of “in flight”packets that have not yet been acknowledged by their destinations. Thesize of the window is adapted at each of the sources to avoidcongestion-based instability, for example, by significantly reducing thesize of the window upon detection of increased packet erasure rates.

In addressing communication over a variety of channels, it has beenobserved that transients in communication characteristics may not be duesolely to conventional congestion effects, and that conventionalcongestion avoidance approaches may not be optimal or even desirable.Some effects that may affect communication characteristics, and that maytherefore warrant adaptation of the manner in which data is transmittedcan include one or more of the follow:

-   -   Effects resulting from cell handoff in cellular systems,        including interruptions in delivery of packets or substantial        reordering of packets delivered after handoff;    -   Effects resulting from “half-duplex” characteristics of certain        wireless channels, for example, in WiFi channels in which return        packets from a destination may be delayed until the wireless        channel is acquired for upstream (i.e., portable device to        access point) communication;    -   Effects of explicit data shaping devices, for example, intended        to throttle certain classes of communication, for instance,        based on a service provider's belief that that class of        communication is malicious or is consuming more than a fair        share of resources.

Although transient effects, which may not be based solely on congestion,may be tolerated using conventional congestion avoidance techniques, oneor more of the approaches described below are particularly tailored tosuch classes of effects with the goal of maintaining efficient use of achannel without undue “over-reaction” upon detection of a transientsituation, while still avoiding causing congestion-based packet loss.

3.3 Inter-Packet Coding

In general, the coding approaches used in embodiments described in thisdocument make use of inter-packet coding in which redundancy informationis sent over the channel such that the redundancy information in onepacket is generally dependent on a set of other packets that have beenor will be sent over the channel. Typically, for a set of N packets ofinformation, a total of N+K packets are sent in a manner that erasure orany K of the packets allows reconstruction of the original N packets ofinformation. In general, a group of N information packets, or a group ofN+K packets including redundancy information (depending on context), isreferred to below as a “block” or a “coding block”. One example of sucha coding includes N information packets without further coding, and thenK redundancy packets, each of which depends on the N informationpackets. However it should be understood more than K of the packets(e.g., each of the N+K packets) may in some embodiments depend on allthe N information packets.

3.3.1 Forward Error Correction and Repair Retransmission

Inter-packet coding in various embodiments described in this documentuse one or both of pre-emptive transmission of redundant packets,generally referred to as forward error correction (FEC), andtransmission of redundant packets upon an indication that packets haveor have a high probability of having been erased based on feedback,which is referred to below as repair and/or retransmission. The feedbackfor repair retransmission generally comes from the receiver, but moregenerally may come from a node or other channel element on the path tothe receiver, or some network element having information about thedelivery of packets along the path. In the FEC mode, K redundant packetsmay be transmitted in order to be tolerant of up to K erasures of the Npackets, while in the repair mode, in some examples, for each packetthat the transmitter believes has been or has high probability of havingbeen erased, a redundant packet it transmitted from the transmitter,such that if in a block of N packets, K packets are believed to havebeen erased based on feedback, the transmitter sends at least anadditional K packets.

As discussed more fully below, use of a forward error correction modeversus a repair mode represents a tradeoff between use of more channelcapacity for forward error correction (i.e., reduced throughout ofinformation) versus incurring greater latency in the presence oferasures for repair retransmission. As introduced above, the datacharacteristics being transmitted may determine the relative importanceof throughput versus latency, and the PC-TCP modules may be configuredor adapted accordingly.

If on average the packet erasure rate E is less than K/(N+K), then“onaverage” the N+K packets will experience erasure of K or fewer of thepackets and the remaining packets will be sufficient to reconstruct theoriginal N. Of course even if E is not greater than K/(N+K), randomvariability, non-stationarity of the pattern of erasures etc. results insome fraction of the sets of N+K packets having greater than K erasures,so that there is insufficient information to reconstruct the N packetsat the destination. Therefore, even using FEC, at least some groups of Ninformation packets will not be reconstructable. Note, for example, withE=0.2, N=8, and K=2, even though only 2 erasures may be expected onaverage, the probability of more than 2 erasures is greater than 30%,and even with E=0.1 this probability is greater than 7%, therefore thenature (e.g., timing, triggering conditions etc.) of the retransmissionapproaches may be significant, as discussed further below. Also asdiscussed below, the size of the set of packets that are coded togetheris significant. For example, increasing N by a factor of 10 to K+N=100reduces the probably of more than the average number of 20 erasures(i.e., too many erasures to reconstruct the N=80 data packets) from over7% to less than 0.1%.

Also as discussed further below, there is a tradeoff between use oflarge blocks of packets (i.e., large N) versus smaller blocks. For aparticular code rate R=N/(N+K), longer blocks yield a higher probabilityof being able to fully recover the N information packets in the presenceof random errors. Accordingly, depending on the data characteristics,the PC-TCP modules may be configured to adapt to achieve a desiredtradeoff.

In general, in embodiments that guarantee delivery of the N packets,whether or not FEC is used, repair retransmission approaches are used toprovide further information for reconstructing the N packets. Ingeneral, in preferred embodiments, the redundancy information is formedin such a manner that upon an erasure of a packet, the redundancyinformation that is sent from the transmitter does not depend on thespecific packets that were erased, and is nevertheless suitable forrepairing the erasure independent of which packet was erased.

3.3.2 Random Linear Coding

In general, a preferred approach to inter-packet coding is based onRandom Linear Network Coding (RLNC) techniques. However, it should beunderstood that although based on this technology, not all features thatmay be associated with this term are necessarily incorporated. Inparticular, as described above in the absence of intermediate nodes thatperform recoding, there is not necessarily a“network” aspect to theapproach. Rather, redundancy information is generally formed bycombining the information packets into coded packets using arithmeticcombinations, and more specifically, as sums of products of coefficientsand representation of the information packets over arithmetic fields,such as finite fields (e.g., Galois Fields of order p^(n)). In general,the code coefficients are chosen from a sufficiently large finite fieldin a random or pseudo-random manner, or in another way that thecombinations of packets have a very low probability or frequency ofbeing linearly dependent. The code coefficients, or a compressed version(e.g., as a reference into a table shared by the transmitter andreceiver), are included in each transmitted combination of data units(or otherwise communicated to the receiver) and used for decoding at thereceiver. Very generally, the original information packets may berecovered at a receiver by inverting the arithmetic combinations. Forexample, a version of Gaussian Elimination may be used to reconstructthe original packets from the coded combinations. A key feature of thisapproach is that for a set of N information packets, as soon at thereceiver has at least N linearly independent combinations of thoseinformation packets in received packets, it can reconstruct the originaldata units. The term“degree of freedom” is generally used below to referto a number of independent linear combinations, such that if N degreesof freedom have been specified for N original packets, then the Noriginal packets can be reconstructed; while if fewer than N degrees offreedom are available, it may not be possible to fully reconstruct anyof the N original packets. If N+K linearly independent linearcombinations are sent, then any N received combinations (i.e., Nreceived degrees of freedom) are sufficient to reconstruct the originalinformation packets.

In some examples, the N+K linearly independent combinations comprise Nselections of the N“uncoded” information packets (essentially N−1 zerocoefficients and one unit coefficient for each uncoded packet), and Kcoded packets comprising the random arithmetic combination with Nnon-zero coefficients for the N information packets. The N uncodedpackets are transmitted first, so that in the absence of erasures theyshould be completely received as soon as possible. In the case of oneerasure of the original N packets, the receiver must wait for thearrival of one redundant packet (in addition to the N−1 originalpackets), and once that packet has arrived, the erased packet may bereconstructed. In the case of forward error correction, the K redundantpackets follow (e.g., immediately after) the information packets, andthe delay incurred in reconstructing the erased information packetdepends on the transmission time of packets. In the case of repairretransmission, upon detection of an erasure or high probability of anerasure, the receiver provides feedback to the transmitter, which sendsthe redundancy information upon receiving the feedback. Therefore, thedelay in being able to reconstruct the erased packet depends on theround-trip-time from the receiver to the transmitter and back.

As discussed in more detail below, feedback from the receiver to thetransmitter may be in the form of acknowledgments sent from the receiverto the transmitter. This feedback in acknowledgements at least informsthe transmitter of a number of the N+K packets of a block that have beensuccessfully received (i.e., the number of received degrees of freedom),and may provide further information that depends on the specific packetsthat have been received at the receiver although such furtherinformation is not essential.

As introduced above, packets that include the combinations of originalpackets generally also include information needed to determine thecoefficients used to combine the original packets, and informationneeded to identify which original packets were used in the combination(unless this set, such as all the packets of a block, is implicit). Insome implementations, the coefficients are explicitly represented in thecoded packets. In some embodiments, the coefficients are encoded withreference to shared information at the transmitter and the receiver. Forinstance, tables of pre-generated (e.g., random, pseudo random, orotherwise selected) coefficients, or sets of coefficients, may be storedand references into those tables are used to determine the values of thecoefficients. The size of such a table determines the number of paritypackets that can be generated while maintaining the linear independenceof the sets of coefficients. It should be understood that yet other waysmay be used to determine the coefficients.

Another feature of random linear codes is that packets formed as linearcombinations of data units may themselves be additively combined toyield combined linear combinations of data units. This process isreferred to in some instances as“recoding”, as distinct from decodingand then repeating encoding.

There are alternatives to the use of RLNC, which do not necessarilyachieve similar optimal (or provably optimum, or near optimal)throughput as RLNC, but that give excellent performance in somescenarios when implemented as described herein. For example, variousforms of parity check codes can be used. Therefore, it should beunderstood that RLNC, or any particular aspect of RLNC, is not anessential feature of all embodiments described in this document.

3.4 Batch Transmission

As introduced above, in at least some applications, data to betransmitted from a transmitter to a receiver forms a batch (i.e., asopposed to a continuous stream), with an example of a batch being a fileor a segment (e.g., a two second segment of multimedia) of a file.

In an embodiment of the PC-TCP modules, the batch is transferred fromthe transmitter to the receiver as a series of blocks, with each blockbeing formed from a series of information packets. In general, eachblock has the same number of information packets, however use of samesize blocks is not essential.

The transmitter PC-TCP module generally receives the data units from thesource application and forms the information packets of the successiveblocks of the batch. These information packets are queued at thetransmitter and transmitted on the channel to the receiver. In general,at the transmitter, the dequeueing and transmission of packets to thereceiver makes use of congestion control and/or rate control mechanismsdescribed in more detail below. The transmitter PC-TCP also retains theinformation packets (or sufficient equivalent information) to constructredundancy information for the blocks. For instance the transmitterPC-TCP buffers the information packets for each block for which thereremains the possibility of an unrecovered erasure of a packet duringtransit from the transmitter to the receiver.

In general, the receiver provides feedback to the transmitter. Variousapproaches to determining when to provide the feedback and whatinformation to provide with the feedback are described further below.The feedback provides the transmitter with sufficient information todetermine that a block has been successfully received and/orreconstructed at the receiver. When such success feedback for a blockhas been received, the transmitter no longer needs to retain theinformation packets for the block because there is no longer thepossibility that redundancy information for the block will need to besent to the receiver.

The feedback from the receiver to the transmitter may also indicate thata packet is missing. Although in some cases the indication that a packetis missing is a premature indication of an erasure, in this embodimentthe transmitter uses this missing feedback to trigger sending redundantinformation for a block. In some examples, the packets for a block arenumbered in sequence of transmission, and the feedback represents thehighest number received and the number of packets (i.e., the number ofdegrees of freedom) received (or equivalently the number of missingpackets or remaining degrees of freedom needed) for the block. Thetransmitter addresses missing packet feedback for a block through thetransmission of redundant repair blocks, which may be used by thereceiver to reconstruct the missing packets and/or original packets ofthe block.

As introduced above, for each block, the transmitter maintainssufficient information to determine the highest index of a packetreceived at the receiver, the number of missing packets transmittedprior to that packet, and the number of original or redundancy packetsafter the highest index received that have been transmitted (i.e.,are“in flight” unless erased in transit) or queued for transmission atthe transmitter.

When the transmitter receives missing packet feedback for a block, ifthe number of packets for the block that are“in flight” or queue wouldnot be sufficient if received successfully (or are not expected to be inview of the erasure rate), the transmitter computes (or retrievesprecomputed) a new redundant packet for the block and queues it fortransmission. Such redundancy packets are referred to as repair packets.In order to reduce the delay in reconstructing a block of packets at thereceiver, the repair packets are sent preferentially to the informationpackets for later blocks. For instance, the repair packets are queued ina separate higher-priority queue that is used to ensure transmission ofrepair packets preferentially to the queue of information packets.

In some situations, feedback from the receiver may have indicated that apacket is missing. However, that packet may later arrive out of order,and therefore a redundant packet for that block that was earliercomputed and queued for transmission is no longer required to bedelivered to the receiver. If that redundant packet has not yet beentransmitted (i.e., it is still queued), that packet may be removed fromthe queue thereby avoiding wasted use of channel capacity for a packetthat will not serve to pass new information to the receiver.

In the approach described above, redundancy packets are sent as repairpackets in response to feedback from the receiver. In some examples,some redundancy packets are sent pre-emptively (i.e., as forward errorcorrection) in order to address possible packet erasures. One approachto send such forward error correction packets for each block. However,if feedback has already been received at the transmitter that asufficient number of original and/or coded packets for a block have beenreceived, then there is no need to send further redundant packets forthe block.

In an implementation of this approach, the original packets for all theblocks of the batch are sent first, while repair packets are beingpreferentially sent based on feedback from the receiver. After all theoriginal packets have been transmitted, and the queue of repair packetsis empty, the transmitter computes (or retrieves precomputed) redundancypackets for blocks for which the transmitter has not yet receivedfeedback that the blocks have been successfully received, and queuesthose blocks as forward error correction packets for transmission in thefirst queue. In general, because the repair blocks are sent with higherpriority that the original packets, the blocks for which successfeedback has not yet been received are the later blocks in the batch(e.g., a trailing sequence of blocks of the batch).

In various versions of this approach, the number and order oftransmission of the forward error correction packets are determined invarious ways. A first way uses the erasure rate to determine how manyredundant packets to transmit. One approach is to send at least oneredundant packet for each outstanding block. Another approach is to senda number of redundancy packets for each outstanding block so that basedon an expectation of the erasure rate of the packets that are queued andin flight for the block will yield a sufficient number of successfullyreceived packets in order to reconstruct the block. For example, if afurther n packets are needed to reconstruct a block (e.g., a number n<Npackets of the original N packets with N−n packets having been erased),then n+k packets are sent, for instance, with n+k≥n/E, where E is anestimate of the erasure rate on the channel.

Another way of determining the number and order of forward errorcorrection packets addresses the situation in which a block transmissiontime is substantially less than the round-trip-time for the channel.Therefore, the earliest of the blocks for which the transmitter has notreceived success feedback may in fact have the success feedback inflight from the receiver to the transmitter, and therefore sendingforward error correction packets may be wasteful. Similarly, even iffeedback indicating missing packet feedback for a block is receivedsufficiently early, the transmitter may still send a repair packetwithout incurring more delay in complete reconstruction of the entirebatch than would be achieved by forward error correction.

In an example, the number of forward error correction packets queued foreach block is greater for later blocks in the batch than for earlierones. A motivation for this can be understood by considering the lastblock of the batch where it should be evident that it is desirable tosend a sufficient number of forward error correction packets to ensurehigh probability of the receiver having sufficient information toreconstruct the block without the need from transmission of a repairpacket and the associated increase in latency. On the other hand, it ispreferable to send fewer forward error correction packets for theprevious (or earlier) block because in the face of missing packetfeedback from the receiver, the transmitter may be able to send a repairpacket before forward error correction packets for all the later blockshave been sent, thereby not incurring a delay in overall delivery of thebatch.

In one implementation, after all the original packets have been sent,and the transmitter is in the forward error correction phase in which itcomputes and sends the forward error correction packets, if thetransmitter receives a missing packet feedback from the receiver, itcomputes and sends a repair packet for the block in question (ifnecessary) as described above, and clears the entire queue of forwarderror correction packets. After the repair packet queue is again empty,the transmitter again computes and queues forward error correctionpackets for the blocks for which it has not yet received successfeedback. In an alternative somewhat equivalent implementation, ratherthan clearing the forward error correction queue upon receipt of amissing packet feedback, the transmitter removes forward errorcorrection packets from the queue as they are no longer needed based onfeedback from the receiver. In some examples, if success feedback isreceived for a block for which there are queued forward error correctionpackets, those forward error correction packets are removed from thequeue. In some examples, the feedback from the receiver may indicatethat some but not all of the forward error correction packets in thequeue are no longer needed, for example, because out-of-order packetswere received but at least some of the original packets are stillmissing.

An example of the way the transmitter determines how many forward errorcorrection packets to send is that the transmitter performs acomputation:(N+g(i)−a _(i))/(1−p)−f _(i)where

p=smoothed loss rate,

N=block size,

i=block index defined as number of blocks from last block,

a_(i)=number of packets acked from block i,

f_(i)=packets in-flight from block i, and

g(i)=a decreasing function of i, to determine the number of FEC packetsfor a block.

It should be understood that in some alternative implementations, atleast some forward error correction packets may be interspersed with theoriginal packets. For example, if the erasure rate for the channel isrelatively high, then at least some number of redundancy packets may beneeded with relatively high probability for each block, and there is anoverall advantage to preemptively sending redundant FEC packets as soonas possible, in addition to providing the mechanism for feedback basedrepair that is described above.

It should be also understood that use of subdivision of a batch intoblocks is not necessarily required in order to achieve the goal ofminimizing the time to complete reconstruction of the block at thereceiver. However, if the forward error correction is applied uniformlyto all the packets of the batch, then the preferential protection oflater packets would be absent, and therefore, latency caused by erasureof later packets may be greater than using the approach described above.However, alternative approaches to non-uniform forward error protection(i.e., introduction of forward error correction redundancy packets) maybe used. For example, in the block based approach described above,packets of the later blocks each contribute to a greater number offorward error correction packets than do earlier ones, and analternative approach to achieving this characteristic maybe to use anon-block based criterion to construction of the redundancy packets inthe forward error correction phase. However, the block based approachdescribed above has advantages of relative simplicity and generalrobustness, and therefore even if marginally“suboptimal” provides anoverall advantageous technical solution to minimizing the time tocomplete reconstruction within the constraint of throughput and erasureon the channel linking the transmitter and receiver.

Another advantage of using a block-based approach is that, for example,when a block within the batch, say the m^(th) block of M blocks of thebatch has an erasure, the repair packet that is sent from thetransmitter depends only on the N original packets of the m^(th) block.Therefore, as soon as the repair packet arrives, and the available(i.e., not erased) N−1 packets of the block arrive, the receiver has theinformation necessary to repair the block. Therefore, by constructingthe repair packet without contribution of packets in later blocks of thebatch, the latency of the reconstruction of the block is reduced.Furthermore, by having the repair packets depend on only N originalpackets, the computation required to reconstruct the packets of theblock is less than if the repair packets depend on more packets.

It should be understood that even in the block based transmission of abatch of packets, the blocks are not necessarily uniform in size, andare not necessarily disjoint. For example, blocks may overlap (e.g., by50%, 75%, etc.) thereby maintaining at least some of the advantages ofreduced complexity in reconstruction and reduced buffering requirementsas compared to treating the batch as one block. An advantage of suchoverlapping blocks may be a reduced latency in reconstruction becauserepair packets may be sent that do not require waiting for originalpackets at the receiver prior to reconstruction. Furthermore,non-uniform blocks may be beneficial, for example, to increase theeffectiveness of forward error correction for later block in a batch byusing longer blocks near the end of a batch as compared to near thebeginning of a batch.

In applications in which the entire batch is needed by the destinationapplication before use, low latency of reconstruction may be desirableto reduce buffering requirements in the PC-TCP module at the receiver(and at the transmitter). For example, all packets that may contributeto a later received repair packet are buffered for their potentialfuture use. In the block based approach, once a block is fullyreconstructed, then the PC-TCP module can deliver and discard thosepackets because they will not affect future packet reconstruction.

Although described as an approach to delivery of a batch of packets, theformation of these batches may be internal to the PC-TCP modules,whether or not such batches are formed at the software applicationlevel. For example, the PC-TCP module at the transmitter may receive theoriginal data units that are used to form the original packets via asoftware interface from the source application. The packets aresegmented into blocks of N packets as described above, and the packetsqueued for transmission. In one embodiment, as long as the sourceapplication provides data units sufficiently quickly to keep the queuefrom emptying (or from emptying for a threshold amount of time), thePC-TCP module stays in the first mode (i.e., prior to sending forwarderror correction packets) sending repair packets as needed based onfeedback information from the receiver. When there is a lull in thesource application providing data units, then the PC-TCP module declaresthat a batch has been completed, and enters the forward error correctionphase described above. In some examples, the batch formed by the PC-TCPmodule may in fact correspond to a batch of data units generated by thesource application as a result of a lull in the source applicationproviding data units to the PC-TCP module while it computes data unitsfor a next batch, thereby inherently synchronizing the batch processingby the source application and the PC-TCP modules.

In one such embodiment, the PC-TCP module remains in the forward errorcorrection mode for the declared batch until that entire batch has beensuccessfully reconstructed at the receiver. In another embodiment, ifthe source application begins providing new data units before thereceiver has provided feedback that the previous batch has beensuccessfully reconstructed, the transmitter PC-TCP module begins sendingoriginal packets for the next batch at a lower priority than repair orforward error correction packets for the previous batch. Such anembodiment may reduce the time to the beginning of transmission of thenext batch, and therefore reduces the time to successful delivery of thenext batch.

In the embodiments in which the source application does not necessarilyprovide the data in explicit batches, the receiver PC-TCP moduleprovides the data units in order to the destination application withoutnecessarily identifying the block or batch boundaries introduced at thetransmitter PC-TCP module. That is, in at least some implementations,the transmitter and receiver PC-TCP modules provide a reliable channelfor the application data units without exposing the block and batchstructure to the applications.

As described above for certain embodiments, the transmitter PC-TCPmodule reacts to missing packet feedback from the receiver PC-TCP moduleto send repair packets. Therefore, it should be evident that themechanism by which the receiver sends such feedback may affect theoverall behavior of the protocol. For example, in one example, thereceiver PC-TCP module sends a negative acknowledgment as soon as itobserves a missing packet. Such an approach may provide the lowestlatency for reconstruction of the block. However, as introduced above,missing packets may be the result of out-of-order delivery. Therefore, aless aggressive generation of missing packet feedback, for example, bydelay in transmission of a negative acknowledgment, may reduce thetransmission of unnecessary repair packets with only a minimal increasein latency in reconstruction of that block. However, such delay insending negative acknowledgements may have an overall positive impact onthe time to successfully reconstruct the entire block because laterblocks are not delayed by unnecessary repair packets. Alternativeapproaches to generation of acknowledgments are described below.

In some embodiments, at least some of the determination of when to sendrepair packets is performed at the transmitter PC-TCP. For example, thereceiver PC-TCP module may not delay the transmission of missing packetfeedback, and it is the transmitter PC-TCP module that delays thetransmission of a repair packet based on its weighing of the possibilityof the missing packet feedback being based on out-of-order delivery asopposed to erasure.

3.5 Protocol Parameters

Communication between two PC-TCP endpoints operates according toparameters, some of which are maintained in common by the endpoints, andsome of which are local to the sending and/or the receiving endpoint.Some of these parameters relate primarily to forward error correctionaspects of the operation. For example, such parameters include thedegree of redundancy that is introduced through the coding process. Asdiscussed below, further parameters related to such coding relate to theselection of packets for use in the combinations. A simple example ofsuch selection is segmentation of the sequence of input data units into“frames” that are then independently encoded. In addition to the numberof such packets for combination (e.g., frame length), other parametersmay relate to overlapping and/or interleaving of such frames of dataunits and/or linear combinations of such data units.

Further parameters relate generally to transport layer characteristicsof the communication approach. For example, some parameters relate tocongestion avoidance, for example, representing a size of a window ofunacknowledged packets, transmission rate, or other characteristicsrelated to the timing or number of packets sent from the sender to thereceiver of the PC-TCP communication.

As discussed further below, communication parameters (e.g., codingparameters, transport parameters) may be set in various ways. Forexample, parameters may be initialized upon establishing a sessionbetween two PC-TCP endpoints. Strategies for setting those parametersmay be based on various sources of information, for example, accordingto knowledge of the communication path linking the sender and receiver(e.g., according to a classification of path type, such as 3G wirelessversus cable modem), or experienced communication characteristics inother sessions (e.g., concurrent or prior sessions involving the samesender, receiver, communication links, intermediate nodes, etc.).Communication parameters may be adapted during the course of acommunication session, for example, in response to observedcommunication characteristics (e.g., congestion, packet loss, round-triptime, etc.)

3.6 Transmission Control

Some aspects of the PC-TCP approaches relate to control of transmissionof packets from a sender to a receiver. These aspects are generallyseparate from aspects of the approach that determine what is sent in thepackets, for example, to accomplish forward error correction,retransmission, or the order in which the packets are sent (e.g,relative priority of forward error correction packets versionretransmission packets). Given a queue of packets that are ready fortransmission from the sender to the receiver, these transmission aspectsgenerally relate to flow and/or congestion control.

3.6.1 Congestion Control

Current variants of TCP, including binary increase congestion control(BIC) and cubic-TCP, have been proposed to address the inefficiencies ofclassical TCP in networks with high losses, large bandwidths and longround-trip times. BIC-TCP and CUBIC algorithms have been used because oftheir stability. After a backoff, BIC increases the congestion windowlinearly then logarithmically to the window size just before backoff(denoted by W_(max)) and subsequently increases the window in ananti-symmetric fashion exponentially then linearly. CUBIC increases thecongestion window following backoff according to a cubic function withinflection point at W_(max). These increase functions cause thecongestion window to grow slowly when it is close to W_(max), promotingstability. On the other hand, other variants such as HTCP and FAST TCPhave the advantage of being able to partially distinguish congestion andnon-congestion losses through the use of delay as a congestion signal.

An alternative congestion control approach is used in at least someembodiments. In some such embodiments, we identify a concave portion ofthe window increase function as W_(concave)(t)=W_(max)+c₁(t−k)³ and aconvex portion of the window increase function asW_(convex)(t)=W_(max)+c₂(t−k)³ where c₁ and c₂ are positive tunableparameters and

$k = \sqrt[3]{\left( {\left( {{W\_ max} - W} \right)/c_{1}} \right)}$and W is the window size just after backoff.

This alternative congestion control approach can be flexibly tuned fordifferent scenarios. For example, a larger value of c₁ causes thecongestion window to increase more rapidly up to W_(max) and a largevalue of c₂ causes the congestion window to increase more rapidly beyondW_(max).

Optionally, delay is used as an indicator to exit slow start and move tothe more conservative congestion avoidance phase, e.g. when a smoothedestimate of RTT exceeds a configured threshold relative to the minimumobserved RTT for the connection. We can also optionally combine theincrease function of CUBIC or other TCP variants with the delay-basedbackoff function of HTCP.

In some embodiments, backoff is smoothed by allowing a lower rate oftransmission until the number of packets in flight decreases to the newwindow size. For instance, a threshold, n, is set such that once npackets have been acknowledged following a backoff, then one packet isallowed to be sent for every two acknowledged packets, which is roughlyhalf of the previous sending rate. This is akin to a hybrid window andrate control scheme.

3.6.2 Transmission Rate Control

3.6.2.1 Pacing Control by Sender

In at least some embodiments, pacing is used to regulate and/or spreadout packet transmissions, making the transmission rate less bursty.While pacing can help to reduce packet loss from buffer overflows,previous implementations of pacing algorithms have not shown clearadvantages when comparing paced TCP implementations to non-paced TCPimplementations. However, in embodiments where the data packets arecoded packets as described above, the combination of packet coding andpacing may have advantages. For example, since one coded packet may beused to recover multiple possible lost packets, we can use coding tomore efficiently recover from any spread out packet losses that mayresult from pacing. In embodiments, the combination of packet coding andpacing may have advantages compared to uncoded TCP with selectiveacknowledgements (SACK).

Classical TCP implements end-to-end congestion control based onacknowledgments. Variants of TCP designed for high-bandwidth connectionsincrease the congestion window (and consequently the sending rate)quickly to probe for available bandwidth but this can result in burstsof packet losses when it overshoots, if there is insufficient bufferingin the network.

A number of variants of TCP use acknowledgment feedback to determineround-trip time and/or estimate available bandwidth, and they differ inthe mechanisms with which this information is used to control thecongestion window and/or sending rate. Different variants have scenariosin which they work better or worse than others.

3.7 Error Control

Classical TCP performs poorly on networks with packet losses. Congestioncontrol can be combined with coding such that coded packets are sentboth for forward error correction (FEC) to provide protection against ananticipated level of packet loss, as well as for recovering from actuallosses indicated by feedback from the receiver.

While the simple combination of packet coding and congestion control hasbeen suggested previously, the prior art does not adequately account fordifferences between congestion-related losses, bursty and/or randompacket losses. Since congestion-related loss may occur as relativelyinfrequent bursts, it may be inefficient to protect against this type ofloss using FEC.

In at least some embodiments, the rates at which loss events occur areestimated. A loss event may be defined as either an isolated packet lossor a burst of consecutive packet losses. In some examples, the sourcePC-TCP may send FEC packets at the estimated rate of loss events, ratherthan the estimated rate of packet loss. This embodiment is an efficientway to reduce non-useful FEC packets, since it may not bedisproportionately affected by congestion-related loss.

In an exemplary embodiment, the code rate and/or packet transmissionrate of FEC can be made tunable in order to trade-off between the usefulthroughput seen at the application layer (also referred to as goodput)and recovery delay. For instance, the ratio of the FEC rate to theestimated rate of loss events can be made a tunable parameter that isset with a priori knowledge of the underlying communications paths ordynamically adjusted by making certain measurements of the underlyingcommunications paths.

In another exemplary embodiment, the rate at which loss bursts of up toa certain length occur may be estimated, and appropriate burst errorcorrecting codes for FEC, or codes that correct combinations of burstand isolated errors, may be used.

3.8 Parameter Control

3.8.1 Initialization

In some embodiments, to establish a session parameters for the PC-TCPmodules are set to a predefine set of default parameters. In otherembodiments, approaches that attempt to select better initial parametersare used. Approaches include use of parameter values from otherconcurrent or prior PC-TCP sessions, parameters determined fromcharacteristics of the communication channel, for example, selected fromstored parameters associated with different types of channels, orparameters determined by the source or destination application accordingto the nature of the data to be transported (e.g., batch versus stream).

3.8.2 Tunable Coding

Referring to FIG. 22, in an embodiment in which parameters are“tuned”(e.g., through feedback from a receiver or on other considerations) aserver application 2410 is in communication with a client application2490 via a communication channel 2450. In one example, the serverapplication 2410 may provide a data stream encoding multimedia content(e.g., a video) that is accepted by the client application 2490, forexample, for presentation to a user of the device on which the clientapplication is executing. The channel 2450 may represent what istypically a series of network links, for example including links of oneor more types, including:

-   -   a link traversing private links on a server local area network,    -   a link traversing the public Internet,    -   a link traversing a fixed (i.e., wireline) portion of a cellular        telephone network,    -   and a link traversing a wireless radio channel to the user's        device (e.g., a cellular telephone channel or satellite link or        wireless LAN).

The channel 2450 may be treated as carrying a series of data units,which may but do not necessarily correspond directly to InternetProtocol (IP) packets. For example, in some implementations multipledata units are concatenated into an IP packet, while in otherimplementations, each data unit uses a separate IP packet or only partof an IP packet. It should be understood that in yet otherimplementations, the Internet Protocol is not used—the techniquesdescribed below do not depend on the method of passing the data unitsover the channel 2450.

A transmitter 2420 couples the server application 2410 to the channel2450, and a receiver 2480 couples the channel 2450 to the clientapplication 2490. Generally, the transmitter 2420 accepts input dataunits from the server application 2480. In general, these data units arepassed over the channel 2450, as well as retained for a period of timein a buffer 2422. From time to time, an error control (EC) component2424 may compute a redundancy data unit from a subset of the retainedinput data units in the buffer 2422, and may pass that redundancy dataunit over the channel 2450. The receiver 2480 accepts data units fromthe channel 2450. In general, the channel 2450 may erase and reorder thedata units. Erasures may correspond to“dropped” data units that arenever received at the receiver, as well as corrupted data units that arereceived, but are known to have irrecoverable errors, and therefore aretreated for the most part as dropped units. The receiver may retain ahistory of received input data units and redundancy data units in abuffer 2482. An error control component 2484 at the receiver 2480 mayuse the received redundancy data units to reconstruct erased input dataunits that may be missing in the sequence received over the channel. Thereceiver 2480 may pass the received and reconstructed input data unitsto the client application. In general, the receiver may pass these inputdata units to the client application in the order they were received atthe transmitter.

In general, if the channel has no erasures or reordering, the receivercan provide the input data units to the client application with delayand delay variation that may result from traversal characteristics ofthe channel. When data units are erased in the channel 2450, thereceiver 2480 may make use of the redundancy units in its buffer 2482 toreconstruct the erased units. In order to do so, the receiver may haveto wait for the arrival of the redundancy units that may be useful forthe reconstruction. The way the transmitter computes and introduces theredundancy data units generally affects the delay that may be introducedto perform the reconstruction.

The way the transmitter computes and introduces the redundancy dataunits as part of its forward error correction function can also affectthe complexity of the reconstruction process at the receiver, and theutilization of the channel. Furthermore, regardless of the nature of theway the transmitter introduces the redundancy data units onto thechannel, statistically there may be erased data units for which there isinsufficient information in the redundancy data units to reconstruct theerased unit. In such cases, the error control component 2484 may requesta retransmission of information from the error control component 2424 ofthe transmitter 2420. In general, this retransmitted information maytake the form of further redundancy information that depends on theerased unit. This retransmission process introduces a delay before theerased unit is available to the receiver. Therefore, the way thetransmitter introduces the redundancy information also affects thestatistics such as how often retransmission of information needs to berequested, and with it the delay in reconstructing the erased unit thatcannot be reconstructed using the normally introduced redundancyinformation.

In some embodiments, the error control component 2484 may provideinformation to the error control component 2424 to affect the way thetransmitter introduces the redundancy information. In general, thisinformation may be based on one or more of the rate of (or moregenerally the pattern of) erasures on units on the channel, rate of (ormore generally timing pattern of) and the state of the available unitsin the buffer 2482 and/or the state of unused data in the clientapplication 2490. For example, the client application may provide a“play-out time” (e.g., in milliseconds) of the data units that thereceiver has already provided to the client application such that if thereceiver were to not send any more units, the client application wouldbe“starved” for input units at that time. Note that in otherembodiments, rather than or in addition to receiving information fromthe receiver, the error control component 2424 at the transmitter mayget feedback from other places, for example, from instrumented nodes inthe network that pass back congestion information.

Referring to FIG. 23, a set of exemplary ways that the transmitterintroduces the redundancy data units into the stream of units passedover the channel makes use of alternating runs of input data units andredundancy data units. In FIG. 23, the data units that are“in flight” onthe channel 2450 are illustrated passing from left to right in thefigure. The transmitter introduces the units onto the channel assequences of p input units alternating with sequences of q redundancyunits. Assuming that the data units are the same sizes, this correspondsto a rate R=p/(p+q) code. In an example with p=4 and q=2 and the codehas rate R=2/3.

In a number of embodiments the redundancy units are computed as randomlinear combinations of past input units. Although the description belowfocuses on such approaches, it should be understood that the overallapproach is applicable to other computations of redundancy information,for example, using low density parity check (LDPC) codes and other errorcorrection codes. In the approach shown in FIG. 23, each run of qredundancy units is computed as a function of the previous D inputunits, where in general but not necessarily D>p. In some cases, the mostrecent d data units transmitted are not used, and therefore theredundancy data units are computed from a window of D-d input dataunits. In FIG. 23, d=2, D=10, and D−d=8. Note that because D−d>p, thewindows of input data units used for computation of the successive runsof redundancy units overlap, such that any particular input data unitwill in general contribute to redundancy data units in more than one ofthe runs of q units on the channel.

In FIG. 23, as well as in FIGS. 24-25 discussed below, buffered inputdata units (i.e., in buffer 2422 shown in FIG. 22) are shown on the leftwith time running from the bottom (past) to the top (future), with eachset of D−d units used to compute a run of q redundant units illustratedwith arrows. The sequence of transmitted units, consisting of runs ofinput data units alternating with runs of redundant units, is shown withtime running from right to left (i.e., later packets on the left). Dataunits that have been received and buffered at the receiver are shown onthe right (oldest on the bottom), redundant units computed from runs ofD−d input units indicated next to arrows representing the ranges ofinput data units used to compute those data units. Data units and rangesof input data units that have not yet been received are illustratedusing dashed lines.

FIGS. 24 and 25 show different selections of parameters. In FIG. 24, p=2and q=1 and the code has a rate R=2/3, which is the same rate at theselection of parameters in FIG. 23. Also as in the FIG. 52 selection,d=2, D=10, and D−d=8. Therefore, a difference between FIG. 23 and FIG.24 is not necessarily a degree of forward error protection (although theeffect of burst erasures may be somewhat different in the two cases).More importantly, the arrangement in FIG. 24 generally provides a lowerdelay from the time of an erased data unit to the arrival of redundancyinformation to reconstruct that unit, as compared to the arrangement inFIG. 23. On the other hand, the complexity of processing at the receivermay be greater in the arrangement of FIG. 24 as compared to thearrangement of FIG. 22, in part because redundancy units informationuses multiple different subsets of the input data units, which mayrequire more computation when reconstructing an erased data unit.Turning to FIG. 25, at another extreme, a selection of parameters useslonger blocks with a selection D=8 and q=4. Again, this code has a rateR=2/3. In general, this selection of parameters will incur greater delayin reconstruction of an erased data unit as compared to the selectionsof parameters shown in FIGS. 23 and 24. On the other hand,reconstruction of up to four erasures per block of D=8 input data unitsis relatively less complex than would be required by the selectionsshown in FIGS. 23 and 24.

For a particular rate of code (e.g., rate R=2/3), in an example,feedback received may result in changes of the parameters, for example,between (p,q)=(2,1) or (4,2) or (8,4) depending on of the amount of databuffered at the receiver, and therefore depending on the tolerance ofthe receiver to reconstruction delay.

Note that it is not required that q=p(1−R)/R is an integer, as it is inthe examples shown in FIGS. 23-25. In some embodiments, the length ofthe run of redundant units varies between q=┌p(1−R)/R┐ and q=└p(1−R)/R┘so that the average is ave(q)=p(1−R)/R.

In a variant of the approach described above, different input data unitshave different “priorities” or“importances” such that they are protectedto different degrees than other input data units. For example, in videocoding, data units representing an independently coded video frame maybe more important than data units representing a differentially encodedvideo frame. For example, if the priority levels are indexed i=1,2, . .. , then a proportion ρ_(i)≤1, where Σ_(i)ρ_(i)=1, of the redundancydata units may be computed using data units with priority ≤i. Forexample, for a rate R code, with blocks of input data units of length p,on average ρ_(i) p(1−R)/R redundancy data units per block are computedfrom input data units with priority ≤i.

The value of D should generally be no more than the target playout delayof the streaming application minus an appropriate margin forcommunication delay variability. The playout delay is the delay betweenthe time a message packet is transmitted and the time it should beavailable at the receiver to produce the streaming application output.It can be expressed in units of time, or in terms of the number ofpackets transmitted in that interval. D can be initially set based onthe typical or desired playout delay of the streaming application, andadapted with additional information from the receiver/application.Furthermore, choosing a smaller value reduces the memory and complexityat the expense of erasure correction capability.

The parameter d specifies the minimum separation between a messagepacket and a parity involving that message packet. Since a parityinvolving a message packet that has not yet been received is not usefulfor recovering earlier message packets involved in that parity, settinga minimum parity delay can improve decoding delay when packet reorderingis expected/observed to occur, depending partly also on the parityinterval.

Referring to FIG. 26, in an example implementation making use of theapproaches described above, the server application 2410 is hosted withthe transmitter 2420 at a server node 810, and the client application2490 is hosted at one or a number of client nodes 891 and 892. Althougha wide variety of types of data may be transported using the approachesdescribed above, one example is streaming of encoded multimedia (e.g.,video and audio) data. The communication channel 2450 (see FIG. 22) ismade up in this illustration as a path through one or more networks851-852 via nodes 861-862 in those respective networks. In someimplementations, the receiver is hosted at a client node 891 beinghosted on the same device as the client application 490.

4 Alternatives and Implementations

In the document above, certain features of the packet coding andtransmission control protocols are described individually, or inisolation, but it should be understood that there are certain advantagesthat may be gained by combining multiple features together. Preferredembodiments for the packet coding and transmission control protocolsdescribed may depend on whether the transmission links and network nodestraversed between communication session end-points belong to certainfiber or cellular carriers (e.g. AT&T, T-Mobile, Sprint, Verizon, Level3) and/or end-user Internet Service Providers (ISPs) (e.g. AT&T,Verizon, Comcast, Time Warner, Century Link, Charter, Cox) or are overcertain wired (e.g. DSL, cable, fiber-to-the-curb/home (FTTx)) orwireless (e.g. WiFi, cellular, satellite) links. In embodiments, probetransmissions may be used to characterize the types of network nodes andtransmission links communication signals are traversing and the packetcoding and transmission control protocol may be adjusted to achievecertain performance. In some embodiments, data transmissions may bemonitored to characterize the types of network nodes and transmissionlinks communication signals are traversing and the packet coding andtransmission control protocol may be adjusted to achieve certainperformance. In at least some embodiments, quantities such asround-trip-time (RTT), one-way transmission times (OWTT), congestionwindow, pacing rate, packet loss rate, number of overhead packets, andthe like may be monitored continuously, intermittently, in response to atrigger signal or event, and the like. In at least some embodiments,combinations of probe transmissions and data transmissions may be usedto characterize network and communication session performance in realtime.

In at least some embodiments, network and communication parameters maybe stored in the end-devices of communication sessions and/or they maybe stored in network resources such as servers, switches, nodes,computers, databases and the like. These network and communicationparameters may be used by the packet coding and transmission controlprotocol to determine initial parameter settings for the protocol toreduce the time it may take to adjust protocol parameters to achieveadequate performance. In embodiments, the network and communicationparameters may be tagged and/or associated with certain geographicallocations, network nodes, network paths, equipment types, carriernetworks, service providers, types of transmission paths and the like.In embodiments, the end-devices may be configured to automaticallyrecord and/or report protocol parameter settings and to associate thosesettings with certain locations determined using GPS-type locationidentification capabilities resident in those devices. In embodiments,the end-devices may be configured to automatically record and/or reportprotocol parameters settings and to associate those settings withcertain carrier networks, ISP equipment traversed, types of wired and/orwireless links and the like.

In at least some embodiments, a packet coding and transmission controlprotocol as described above may adjust more than one parameter toachieve adequate or improved network performance. Improved networkperformance may be characterized by less delay in delivering datapackets, less delay in completing file transfers, higher quality audioand video signal delivery, more efficient use of network resources, lesspower consumed by the end-users, more end-users supported by existinghardware resources and the like.

In at least some embodiments, certain modules or features of the packetcoding and transmission control protocol may be turned on or offdepending on the data's path through a network. In some embodiments, theorder in which certain features are implemented or controlled may beadjusted depending on the data's path through a network. In someembodiments, the probe transmissions and/or data transmissions may beused in open-loop or closed-loop control algorithms to adjust theadjustable parameters and/or the sequence of feature implementation inthe packet coding and transmission control protocol.

It should be understood that examples which involve monitoring tocontrol the protocol can in general involve aspects that are implementedat the source, the destination, or at a combination of the source andthe destination. Therefore, it should be evident that althoughembodiments are described above in which features are described as beingimplemented at particular endpoints, alternative embodiments involveimplementation of those features at different endpoints. Also, asdescribed above, monitoring to control the protocol can in generalinvolve aspects that are implemented intermediate nodes or points in thenetwork. Therefore, it should be evident that although embodiments aredescribed above in which features are described as being implemented atparticular endpoints, alternative embodiments involve implementation ofthose features at different nodes, including intermediate nodes,throughout the network.

In addition to the use of monitored parameters for control of theprotocols, the data may be used for other purposes. For example, thedata may support network analytics that are used, for example, tocontrol or provision the network as a whole.

The PC-TCP approaches may be adapted to enhance existing protocols andprocedures, and in particular protocols and procedures used in contentdelivery, for example, as used in coordinated content delivery networks.For instance, monitored parameters may be used to direct a client to theserver or servers that can deliver an entire unit of content as soon aspossible rather than merely direct the client to a least loaded serveror to server accessible over a least congested path. A difference insuch an new approach is that getting an entire file as fast as possiblemay require packets to be sent from multiple servers and/or servers thatare not geographically the closest, over multiple links, and using newacknowledgement protocols that coordinate the incoming data whilerequiring a minimum of retransmissions or FEC overhead. Coordinating mayinclude waiting for gaps in strings of packets (out-of-order packets) tobe filled in by later arriving packets and/or by coded packets. Inaddition, the PC-TCP approaches may improve the performance of wireless,cellular, and satellite links, significantly improving the end-to-endnetwork performance.

Some current systems use“adaptive bit rates” to try to preserve videotransmission through dynamic and/or poorly performing links. In someinstances, the PC-TCP approaches described above replace adaptive bitrate schemes and may be able to present a very high data rate to a userfor a long period of time. In other instances, the PC-TCP approaches areused in conjunction with currently-available adaptive bit rate schemesto support higher data rates on average than could be supported byadaptive bit rate schemes alone. In some instances, the PC-TCPapproaches may include integrated bit rate adjustments as part of itsfeature set and may use any and/or all of the previously identifiedadjustable parameters and/or monitored parameters to improve theperformance of a combined PC-TCP and bit-rate adaptive solution.

Implementations of approaches described above may include softwareimplementations, which use software instructions stored onnon-transitory machine-readable media. The procedures and protocols asdescribed above in the text and figures are sufficient for one skilledin the art to implement them in such software implementations. In someexamples, the software may execute on a client node (e.g., a smartphone)using a general-purpose processor that implements a variety of functionson the client node. Software that executes on end nodes or intermediatenetwork nodes may use processors that are dedicated to processingnetwork traffic, for example, being embedded in network processingdevices. In some implementations, certain functions may be implementedin hardware, for example, using Application-Specific Integrated Circuits(ASICs), and/or Field Programmable Gate Arrays (FPGAs), thereby reducingthe load on a general purpose processor.

Note that in some diagrams and figures in this disclosure, networks suchas the internet, carrier networks, internet service provider networks,local area networks (LANs), metro area networks (MANs), wide areanetworks (WANs), storage area networks (SANs), backhaul networks,cellular networks, satellite networks and the like, may be depicted asclouds. Also note, that certain processes may be referred to as takingplace in the cloud and devices may be described as accessing the cloud.In these types of descriptions, the cloud should be understood to besome type of network comprising networking equipment and wireless and/orwired links.

The description above may refer to a client device communicating with aserver, but it should be understood that the technology and techniquesdescribed herein are not limited to those exemplary devices as theend-points of communication connections or sessions. The end-points mayalso be referred to as, or may be, senders, transmitters, transceivers,receivers, servers, video servers, content servers, proxy servers, cloudstorage units, caches, routers, switches, buffers, mobile devices,tablets, smart phones, handsets, computers, set-top boxes, modems,gaming systems, nodes, satellites, base stations, gateways, satelliteground stations, wireless access points, and the like. The devices atany of the end-points or intermediate nodes of communication connectionsor sessions may be commercial media streaming boxes such as thoseimplementing Apple TV, Roku, Chromecast, Amazon Fire, Slingbox, and thelike, or they may be custom media streaming boxes. The devices at theany of the end-points or intermediate nodes of communication connectionsor sessions may be smart televisions and/or displays, smart appliancessuch as hubs, refrigerators, security systems, power panels and thelike, smart vehicles such as cars, boats, busses, trains, planes, carts,and the like, and may be any device on the Internet of Things (IoT). Thedevices at any of the end-points or intermediate nodes of communicationconnections or sessions may be single-board computers and/or purposebuilt computing engines comprising processors such as ARM processors,video processors, system-on-a-chip (SoC), and/or memory such as randomaccess memory (RAM), read only memory (ROM), or any kind of electronicmemory components.

Communication connections or sessions may exist between two routers, twoclients, two network nodes, two servers, two mobile devices, and thelike, or any combination of potential nodes and/or end-point devices. Inmany cases, communication sessions are bi-directional so that bothend-point devices may have the ability to send and receive data. Whilethese variations may not be stated explicitly in every description andexemplary embodiment in this disclosure, it should be understood thatthe technology and techniques we describe herein are intended to beapplied to all types of known end-devices, network nodes and equipmentand transmission links, as well as to future end-devices, network nodesand equipment and transmission links with similar or improvedperformance.

It is to be understood that the foregoing description is intended toillustrate and not to limit the scope of the invention, some aspects ofwhich are defined by the scope of the appended claims. Furthermore,other embodiments are within the scope of the following claims.

What is claimed is:
 1. A method for data communication between a firstnode and a second node over a data path coupling the first node and thesecond node, the method comprising: determining one or more redundancymessages from data messages at the first node using an error correctingcode; transmitting messages from the first node to the second node overthe data path, the transmitted messages including the data messages andredundancy messages; receiving messages at the first node from thesecond node, including receiving messages indicative of successful andunsuccessful delivery of the messages transmitted from the first node tothe second node; maintaining an estimate of a rate at which loss eventsoccur over the communication path based on the messages received fromthe second node, including updating the estimate to incorporate a singleloss event when one or more of the messages received from the secondnode indicate an unsuccessful delivery of a single packet to the seconddata node, and updating the estimate to incorporate a single loss eventwhen one or more of the messages received from the second node indicatean unsuccessful delivery of a plurality of consecutively transmittedpackets to the second data node; and adjusting a rate of redundancymessages transmitted from the first node based on the estimate of therate at which loss events occur, wherein adjusting the rate ofredundancy messages transmitted from the first node based on theestimate of the rate at which loss events occur includes adjusting aratio of the rate of redundancy messages transmitted from the first nodeto the estimate of the rate at which loss events occur.
 2. The method ofclaim 1 wherein the error correcting code used to determine the one ormore redundancy messages is chosen based at least in part on anestimated rate of loss events where a number of consecutive messagesunsuccessfully delivered to the second data node is less than apredetermined threshold.
 3. The method of claim 2 wherein the errorcorrecting code includes a burst error correcting code.
 4. The method ofclaim 1 further comprising selecting the error correcting code.
 5. Themethod of claim 4 wherein selecting the error correcting code comprisesselecting a burst error correcting code when the estimate of the rate atwhich loss events occur indicates loss bursts of up to a certain length.6. A communication apparatus comprising a first device having aninterface for passing messages to and from a second device over acommunication path coupling the first device to the second device, thefirst device further comprising a communication controller configuredto: determine one or more redundancy messages from data messages at thefirst node using an error correcting code; transmit messages from thefirst node to the second node over the data path, the transmittedmessages including the data messages and redundancy messages; receivemessages at the first node from the second node, including receivingmessages indicative of successful and unsuccessful delivery of themessages transmitted from the first node to the second node; maintain anestimate of a rate at which loss events occur over the communicationpath based on the messages received from the second node, includingupdating the estimate to incorporate a single loss event when one ormore of the messages received from the second node indicate anunsuccessful delivery of a single packet to the second data node, andupdating the estimate to incorporate a single loss event when one ormore of the messages received from the second node indicate anunsuccessful delivery of a plurality of consecutively transmittedpackets to the second data node; and adjusting a rate of redundancymessages transmitted from the first node based on the estimate of therate at which loss events occur, wherein adjusting the rate ofredundancy messages transmitted from the first node based on theestimate of the rate at which loss events occur includes adjusting aratio of the rate of redundancy messages transmitted from the first nodeto the estimate of the rate at which loss events occur.
 7. Thecommunication apparatus of claim 6 wherein the error correcting codeused to determine the one or more redundancy messages is chosen based atleast in part on an estimated rate of loss events where a number ofconsecutive messages unsuccessfully delivered to the second data node isless than a predetermined threshold.
 8. The communication apparatus ofclaim 7 wherein the error correcting code includes a burst errorcorrecting code.
 9. The communication apparatus of claim 6 wherein thecommunication controller is further configured to select the errorcorrecting code.
 10. The communication apparatus of claim 9 whereinselecting the error correcting code comprises selecting a burst errorcorrecting code when the estimate of the rate at which loss events occurindicates loss bursts of up to a certain length.
 11. A method for datacommunication between a first node and a second node over a data pathcoupling the first node and the second node, the method comprising:determining one or more redundancy messages from data messages at thefirst node using an error correcting code; transmitting messages fromthe first node to the second node over the data path, the transmittedmessages including the data messages and redundancy messages; receiving,at the first node and from the second node, feedback indicative ofsuccessful and unsuccessful delivery of the messages transmitted fromthe first node to the second node; maintaining an estimate of a rate atwhich loss events occur over the communication path based on thefeedback, including updating the estimate to incorporate a single lossevent when the feedback indicates: (i) an unsuccessful delivery of asingle packet to the second data node, and (ii) an unsuccessful deliveryof a plurality of consecutively transmitted packets to the second datanode; and adjusting a rate of redundancy messages transmitted from thefirst node based on the estimate of the rate at which loss events occur,wherein adjusting the rate of redundancy messages transmitted from thefirst node based on the estimate of the rate at which loss events occurincludes adjusting a ratio of the rate of redundancy messagestransmitted from the first node to the estimate of the rate at whichloss events occur.
 12. The method of claim 11 wherein the errorcorrecting code used to determine the one or more redundancy messages ischosen based at least in part on an estimated rate of loss events wherea number of consecutive messages unsuccessfully delivered to the seconddata node is less than a predetermined threshold.
 13. The method ofclaim 11 further comprising selecting the error correcting code.
 14. Themethod of claim 13 wherein selecting the error correcting code comprisesselecting a burst error correcting code when the estimate of the rate atwhich loss events occur indicates loss bursts of up to a certain length.15. The method of claim 13 wherein selecting the error correcting codecomprises selecting a combination of a burst error correcting code andan isolated error correcting code.
 16. The method of claim 11 whereinupdating the estimate to incorporate the single loss event when thefeedback indicates: (ii) the unsuccessful delivery of the plurality ofconsecutively transmitted packets to the second data node comprises:determining a number of the plurality of consecutively transmittedpackets unsuccessfully delivered to the second data node; and updatingthe estimate to incorporate the single loss event when the number of theplurality of consecutively transmitted packets unsuccessfully deliveredto the second data node is below a threshold.
 17. The method of claim 16further comprising updating the estimate to incorporate more than thesingle loss event when the number of the plurality of consecutivelytransmitted packets unsuccessfully delivered to the second data node isabove the threshold.